# 导包
import torch

# 提前设置随机种子,保证数据统一
torch.manual_seed(666)
# 创建张量,用于索引练习
data = torch.randint(1, 10, size=(4, 5), dtype=torch.float32)
print(data)
print(data.shape)
print(data.ndim)
print('='*200)

# TODO 索引操作 格式:张量[行索引,列索引]
# TODO 1.演示单个索引获取数据

# 需求: 获取第二行数据
print(data[1,:]) # 获取第二行数据
print(data[1])

print('=' * 200)
# 需求: 获取第二列数据
print(data[:,1])# 逗号绝对不能省略
print(data[...,1])# 逗号绝对不能省略

# TODO 索引操作 格式:张量[行索引,列索引]
# TODO 2.演示列表指定多个索引获取数据
# 需求: 获取第一行和第三行数据
print(data[[0,2],:])

# 需求:获取第一列和第三列数据
print(data[:,[0,2]])

print('=' * 200)
# todo 演示特殊情况
# 需求: 获取(0,0)和(2,2)两个位置的数据
print(data[[0,2],[0,2]])
# 需求:获取第一行和第三行数据 以及 第一列和第三列交集的数据
print(data[[[0],[2]],[0,2]])

# 需求: 获取前三行三列的数据
print(data[0:3,0:3])
print(data[:3,:3])

# 需求: 获取前三行三列的数据
print(data[0::2,0::2])
# print(data[:3,:3])

print('=' * 200)
#TODO 索引操作 格式为:张量[行索引,列索引]
# TODO 4.演示布尔索引获取数据
print(data > 5)

print(data[data > 5])

print(data[0][data[0] > 5])


print('=' * 200)
# 需求:获取第一行数据大于5数据的所有的列
print(data[:, data[0] > 5])

print(data[:,0][data[:,0] > 3])

# 多维索引





































